package com.asa.tongji;

public class TUtils3 {
	/***********************样本间的比较9*******************************/

	/**
	 * 两个独立正态总体的均值比较，,两样本间均值差，期望范围
	 * 
	 * @param ux	均值
	 * @param uy	均值
	 * @param ox
	 *            标准差
	 * @param oy
	 *            标准差
	 * @param a
	 *            置信度
	 * @param nx
	 *            样本数量
	 * @param ny 样本数量
	 * @return
	 */
	public static double[] liangzhengtaiduibi(double ux, double uy, double ox,
			double oy, double a, int nx, int ny) {
		double x = ux - uy;
		a = FenBuFunction.zhengtai(a);
		double o = a * Math.sqrt(ox * ox / nx + oy * oy / ny);
		double[] asa = new double[2];
		asa[0] = x - o;
		asa[1] = x + o;
		return asa;
	}
	


	/**
	 * 两个独立正态总体的均值比较
	 * 两个独立正态总体的均值比较 这个是方差相等的情况
	 * 
	 * @param ux
	 * @param uy
	 * @param sx
	 *            标准差
	 * @param sy
	 *            标准差
	 * @param a
	 *            t分布表（例如95%就是(1-95%)/2），n等于两样本和减去2
	 * @param nx
	 *            样本数量
	 * @param ny
	 * @return
	 */
	public static double[] liangzhengtaiduibi2(double ux, double uy, double sx,
			double sy, double a, int nx, int ny) {
		a = FenBuFunction.zhengtai(a);
		double sw = ((nx - 1) * sx * sx + (ny - 1) * sy * sy) / (nx + ny - 2);
		double[] asa = new double[2];
		double u = ux - uy;
		double yituo = a * Math.sqrt(sw * (1 / (double) nx + 1 / (double) ny));
		asa[0] = u - yituo;
		asa[1] = u + yituo;
		return asa;
	}

	/**
	 * 两个独立正态总体的均值比较
	 * 两者方差未知
	 * 
	 * @param ux
	 * @param uy
	 * @param ox
	 *            标准差
	 * @param oy
	 *            标准差
	 * @param a
	 *            t分布表（例如95%就是(1-95%)/2），n等于两样本和减去2
	 * @param nx
	 *            样本数量
	 * @param ny
	 * @return
	 */

	public static double[] liangzhengtaiduibi3(double ux, double uy, double ox,
			double oy, int nx, int ny,double t) {
		
		double v = Math.pow(ox*ox/nx+oy*oy/ny,2)/(Math.pow(ox*ox/nx,2)/nx+Math.pow(oy*oy/ny,2)/ny);
		t = FenBuFunction.tfengbu(t, v);
		double[] asa = new double[2];
		double u = ux - uy;
		double yituo = t * Math.sqrt(ox*ox/nx+oy*oy/ny);
		asa[0] = u - yituo;
		asa[1] = u + yituo;
		return asa;
	}
	
	
	/**
	 * 两个非正态分布总体的均值比较
	 * @param ux	样本均值
	 * @param uy	样本均值
	 * @param ox	样本标准差
	 * @param oy	样本标准差
	 * @param nx	样本空间大小
	 * @param ny	样本空间大小
	 * @param a	置信度
	 * @return 
	 */

	public static double[] feiliangzhengtaiduibi(double ux, double uy, double ox,
			double oy, int nx, int ny,double a) {
		a = FenBuFunction.zhengtai(a);
		double[] asa = new double[2];
		double u = ux - uy;
		double yituo = a * Math.sqrt(ox*ox/nx+oy*oy/ny);
		asa[0] = u - yituo;
		asa[1] = u + yituo;
		return asa;
	}
	
	
	/**
	 * 两个独立正态总体的总统比例比较
	 * 样本条件比较大的时候，可以直接使用这个方法
	 * 要求：
	 * 1，nx,ny>30
	 * 2,两个样本成功和失败的次数都不少于5
	 * 3，px，py不要太接近1或0
	 */
	public static double[] liangzhengtaibilieduibi(double px, double py, double a, int nx, int ny) {
		a = FenBuFunction.zhengtai(a);
		double sw = Math.sqrt(px*(1-px)/nx+py*(1-py)/ny);
		double[] asa = new double[2];
		double u = px - py;
		double yituo = a * sw;
		asa[0] = u - yituo;
		asa[1] = u + yituo;
		return asa;
	}
	

	/**
	 * 两个独立正态总体的总统方差比较
	 * 样本条件比较大的时候，可以直接使用这个方法
	 * @param nx	样本大小
	 * @param ny	样本大小
	 * @param sx	样本方差
	 * @param sy	样本方差
	 * @return	方差区间，要求标准差，自行开方
	 * @throws Exception 	检验数据的规范性
	 */

	public static double[] liangzhengtaifangchaduibi(int nx, int ny,double sx,
			double sy,double f) throws Exception {
		//fa1 fa2代表的是F分布中的两个值F(1-a/2,nx-1,ny-1)和F(a/2,nx-1,ny-1),其中a为置信度，技术能力有限就先这样了
		double[] ffengbu = FenBuFunction.ffengbu(f, nx-1, ny-1);
		for (int i = 0; i < ffengbu.length; i++) {
			//System.out.println(ffengbu[i]);
		}
		double[] asa = new double[2];
		asa[0] = (sx*sx)/(sy*sy)/ffengbu[0];
		asa[1] = (sx*sx)/(sy*sy)/ffengbu[1];
		return asa;
	}
	

	
	
	
}
